﻿Imports SIAVU.Persistencia

Namespace Dominio
    Public Class EntityManager

#Region "Atributos privados"

        Private _Postas As List(Of Posta)

#End Region

#Region "Propiedades"

        Public Overridable Property Postas() As List(Of Posta)
            Get
                Return _Postas
            End Get
            Set(ByVal value As List(Of Posta))
                _Postas = value
            End Set
        End Property

#End Region

#Region "Metodos"

        Public Function GetDestinosSinBuenosAires() As List(Of Ciudad)
            Dim oEntityManagerPersistencia As New EntityManagerPersistencia
            Return oEntityManagerPersistencia.GetDestinosSinBuenosAires()
        End Function

        Public Function GetResourceVerHistorial(ByVal UsuarioID As Long, ByVal Periodo As Date) As DataTable
            Dim dtAux As New DataTable
            Dim oProgramacion As Programacion
            Dim oUsuario As New Usuario
            Dim oListActividadesAux As IList(Of Actividad)
            Dim drAux As DataRow


            dtAux.Columns.Add("DescripcionResource")

            drAux = dtAux.NewRow()
            drAux("DescripcionResource") = "Mi Programación"
            dtAux.Rows.Add(drAux)

            drAux = dtAux.NewRow()
            drAux("DescripcionResource") = "Programación Original"
            dtAux.Rows.Add(drAux)

            oUsuario.UsuarioID = UsuarioID

            oProgramacion = oUsuario.getProgramacionByPeriodo(Periodo, ETipoProgramacion.PlanVuelo)
            If oProgramacion IsNot Nothing Then
                oListActividadesAux = oProgramacion.getHistorialActividadesComoListaActividades()
                If (oListActividadesAux IsNot Nothing AndAlso oListActividadesAux.Count > 0) Then
                    For Each oActividad As Actividad In oListActividadesAux
                        drAux = dtAux.NewRow()
                        drAux("DescripcionResource") = "Modificación " + (oListActividadesAux.IndexOf(oActividad) + 1).ToString
                        dtAux.Rows.Add(drAux)
                    Next
                Else
                    drAux = dtAux.NewRow()
                    drAux("DescripcionResource") = "Sin Modificaciones"
                    dtAux.Rows.Add(drAux)
                End If
            Else
                drAux = dtAux.NewRow()
                drAux("DescripcionResource") = "Sin Modificaciones"
                dtAux.Rows.Add(drAux)
            End If

            drAux = dtAux.NewRow()
            drAux("DescripcionResource") = "Vuelos Realizados"
            dtAux.Rows.Add(drAux)

            Return dtAux
        End Function

        Public Function GetActividadesPostaDestino(ByVal Periodo As Date) As List(Of Actividad)
            Try
                Dim oListaPostasDestino As IList(Of Posta)
                Dim oListaActividadesPostaDestino As New List(Of Actividad)
                Dim oActividadPosta As ActividadPosta = Nothing

                '//Obtengo las Postas para un periodo determinado
                Dim oEntityManagerPersistencia As New EntityManagerPersistencia

                Select Case HttpContext.Current.Request.Url.AbsolutePath.ToUpper()
                    Case "/Presentacion/PreProgramacion.aspx".ToUpper()
                        oListaPostasDestino = oEntityManagerPersistencia.GetPostas(Periodo.Year, Periodo.Month)

                    Case "/Presentacion/ConfirmarTripulantes.aspx".ToUpper()
                        oListaPostasDestino = oEntityManagerPersistencia.GetPostas(Date.Now.Date, Date.Now.Date.AddDays(+2).AddSeconds(-2))

                    Case "/Presentacion/ReprogramarTripulantes.aspx".ToUpper()
                        oListaPostasDestino = oEntityManagerPersistencia.GetPostas(Date.Now.Date, CDate("01/" + Periodo.Month.ToString + "/" + Periodo.Year.ToString).AddMonths(+1).AddSeconds(-2))

                    Case Else
                        oListaPostasDestino = oEntityManagerPersistencia.GetPostas(Periodo.Year, Periodo.Month)

                End Select




                '//Por cada posta encontrada, creo una actividad de tipo posta y la agrego a la lista "oListaActividadesPostaDestino"
                For Each oPostaAux As Posta In oListaPostasDestino
                    oActividadPosta = New ActividadPosta
                    oActividadPosta.ActividadID = oListaPostasDestino.IndexOf(oPostaAux) + 1
                    oActividadPosta.EstadoActividad = EEstadoActividad.Desconocido
                    oActividadPosta.Posta = oPostaAux
                    oListaActividadesPostaDestino.Add(oActividadPosta)
                Next

                Return oListaActividadesPostaDestino
            Catch ex As Exception
                Throw
            End Try

        End Function

        Public Function GetAviones() As IList(Of Avion)
            Try
                Dim oEntityManagerPersistencia As New EntityManagerPersistencia
                Return oEntityManagerPersistencia.GetAviones()
            Catch ex As Exception
                Throw
            End Try
        End Function

        Public Function GetEstadosActividadConfirmarVuelo() As DataTable
            Try
                Dim dtAux As New DataTable("EstadosActividadConfirmarVuelo")
                Dim dcAux As DataColumn

                dcAux = New DataColumn("EstadoActividadID")
                'dcAux.DataType = Type.GetType("System.Int32")
                dtAux.Columns.Add(dcAux)

                dcAux = New DataColumn("Descripcion")
                'dcAux.DataType = Type.GetType("System.String")
                dtAux.Columns.Add(dcAux)

                Dim drAux As DataRow
                drAux = dtAux.NewRow()
                drAux("EstadoActividadID") = EEstadoActividad.NoRealizado.ToString
                drAux("Descripcion") = "No Realizado"
                dtAux.Rows.Add(drAux)

                drAux = dtAux.NewRow()
                drAux("EstadoActividadID") = EEstadoActividad.Realizado.ToString
                drAux("Descripcion") = "Realizado"
                dtAux.Rows.Add(drAux)

                Return dtAux
            Catch ex As Exception
                Throw
            End Try
        End Function

        Public Function GetEstadosActividadConfirmarTripulante() As DataTable
            Try
                Dim dtAux As New DataTable("EstadosActividadConfirmarTripulante")
                dtAux.Columns.Add("EstadoActividadID")
                dtAux.Columns.Add("Descripcion")

                Dim drAux As DataRow
                drAux = dtAux.NewRow()
                drAux("EstadoActividadID") = EEstadoActividad.Confirmada
                drAux("Descripcion") = "Confirmada"
                dtAux.Rows.Add(drAux)

                drAux = dtAux.NewRow()
                drAux("EstadoActividadID") = EEstadoActividad.NoConfirmada
                drAux("Descripcion") = "No Confirmada"
                dtAux.Rows.Add(drAux)

                Return dtAux
            Catch ex As Exception
                Throw
            End Try
        End Function

        Public Function getUsuariosControlBusqueda(Optional ByVal Legajo As Long = Nothing, Optional ByVal NombreCompleto As String = Nothing, Optional ByVal AvionID As Long = Nothing, Optional ByVal bMostrarInconsistentes As Boolean = False) As IList(Of Usuario)
            Try
                Dim oEntityManagerPersistencia As New EntityManagerPersistencia
                Return oEntityManagerPersistencia.getUsuariosControlBusqueda(Legajo, NombreCompleto, AvionID, bMostrarInconsistentes)

            Catch ex As Exception
                Throw
            End Try
        End Function

        Public Function GetTripulantesParaConfirmar(ByVal PostaID As Long) As DataTable
            Try
                Dim oEntityManagerPersistencia As New EntityManagerPersistencia
                Dim arrayL As ArrayList = oEntityManagerPersistencia.GetTripulantesParaConfirmar(PostaID, ETipoProgramacion.PlanVuelo)
                Dim dt As DataTable = Nothing

                If (arrayL IsNot Nothing AndAlso arrayL.Count > 0) Then
                    dt = New DataTable
                    dt.Columns.Add("UsuarioID", GetType(System.Int64))
                    dt.Columns.Add("Legajo")
                    dt.Columns.Add("NombreCompleto")
                    dt.Columns.Add("EstadoActividad")
                    dt.Columns.Add("Observacion")
                    dt.Columns.Add("EstadoActividadFuturo")
                    dt.Columns.Add("AsignarGuardia")
                    dt.Columns.Add("ActividadID")
                    dt.Columns.Add("Modificada")
                    Dim dr As DataRow

                    For Each objeto As Object In arrayL
                        dr = dt.NewRow
                        dr("UsuarioID") = objeto(0)
                        dr("Legajo") = objeto(1)
                        dr("NombreCompleto") = objeto(2)
                        dr("EstadoActividad") = objeto(3)
                        Select Case objeto(3).ToString()
                            Case EEstadoActividad.Realizado.ToString()
                                dr("EstadoActividadFuturo") = objeto(3)
                            Case Else
                                dr("EstadoActividadFuturo") = EEstadoActividad.NoRealizado.ToString
                        End Select
                        dr("Observacion") = objeto(4)
                        dr("AsignarGuardia") = ""
                        dr("Modificada") = DataRowState.Unchanged
                        dr("ActividadID") = objeto(5)
                        dt.Rows.Add(dr)
                    Next

                    Dim keys(0) As DataColumn
                    keys(0) = dt.Columns("UsuarioID")
                    dt.PrimaryKey = keys

                End If

                Return dt

            Catch ex As Exception
                Throw
            End Try
        End Function

        Public Function GetUsuariosDeGuardia() As IList(Of Usuario)
            Try
                Dim oEntityManagerPersistencia As New EntityManagerPersistencia
                Return oEntityManagerPersistencia.GetUsuariosDeguardia(ETipoProgramacion.PlanVuelo)

            Catch ex As Exception
                Throw
            End Try
        End Function

        Public Function GetUsuariosConActividadesByFecha(ByVal Fecha As Date, ByVal TipoProgramacionID As ETipoProgramacion) As DataTable
            Try
                Dim oEntityManagerPersistencia As New EntityManagerPersistencia
                Dim arrayL As ArrayList = oEntityManagerPersistencia.GetUsuariosConActividadesByFecha(Fecha, TipoProgramacionID)
                Dim dt As DataTable = Nothing

                If (arrayL IsNot Nothing AndAlso arrayL.Count > 0) Then
                    dt = New DataTable
                    dt.Columns.Add("UsuarioID")
                    dt.Columns.Add("Legajo")
                    dt.Columns.Add("NombreCompleto")
                    dt.Columns.Add("EstadoActividad")
                    Dim dr As DataRow

                    For Each objeto As Object In arrayL
                        dr = dt.NewRow
                        dr("UsuarioID") = objeto(0)
                        dr("Legajo") = objeto(1)
                        dr("NombreCompleto") = objeto(2)
                        dr("EstadoActividad") = objeto(3)
                        dt.Rows.Add(dr)
                    Next

                    Dim keys(0) As DataColumn
                    keys(0) = dt.Columns("UsuarioID")
                    dt.PrimaryKey = keys

                End If

                Return dt

            Catch ex As Exception
                Throw
            End Try
        End Function

        Public Sub ConfimarTripulantesSacarGuardia(ByVal ListaUsuarioParaConfirmar As DataTable)
            Dim oUsuario As Usuario
            Dim oUsuarioGuardia As Usuario
            Dim oListObjetosParaActualizar As New List(Of Object)
            Try

                If (ListaUsuarioParaConfirmar IsNot Nothing) Then
                    For Each drAux As DataRow In ListaUsuarioParaConfirmar.Rows
                        If drAux("Modificada").ToString() = DataRowState.Modified.ToString() Then
                            If drAux("EstadoActividadFuturo") = EEstadoActividad.Realizado.ToString Then
                                '//Es un usuario que realiza el vuelo
                                oUsuario = New Usuario
                                oUsuario.UsuarioID = drAux("UsuarioID")
                                oUsuario.ConfimarVuelo(CLng(drAux("ActividadID")), True, drAux("Observacion").ToString.Trim, oListObjetosParaActualizar)
                            Else
                                '//Es un usuario que no realiza el vuelo y por ende se le asigna una guardia
                                oUsuarioGuardia = New Usuario
                                oUsuarioGuardia.UsuarioID = CLng(drAux("AsignarGuardia"))
                                oUsuarioGuardia.ConfimarVuelo(CLng(drAux("ActividadID")), False, drAux("Observacion").ToString.Trim, oListObjetosParaActualizar)
                            End If
                        End If
                    Next

                    Dim oEntityManagerPersistencia As New EntityManagerPersistencia
                    oEntityManagerPersistencia.ConfimarTripulantesSacarGuardia(oListObjetosParaActualizar)
                End If

            Catch ex As Exception
                Throw
            End Try
        End Sub

#End Region

    End Class
End Namespace

